package cn.melon.mod.dorm;

import java.util.List;

import org.apache.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import cn.melon.Helper.LoggerHelper;
import cn.melon.base.BaseController;
import cn.melon.mod.dorm.dao.DormDaolmpl;
import cn.melon.mod.dorm.dao.IDormDao;
import cn.melon.mod.login.UserInfo;

public class DormController extends BaseController {

    private String TAG = LoggerHelper.makeLogTag(DormController.class);
    private Logger dormLogger = LoggerHelper.serverLogger();

    private IDormDao dormDao = new DormDaolmpl();

    public DormController(String request) {
        super(request);
    }

    @Override
    public void onResponse() {

        String req = getRequest();

        dormLogger.debug(TAG + req);
        try {
            JSONObject reqJSON = new JSONObject(req);
            String action = reqJSON.getString("action");
            dormLogger.debug(TAG + action);

            DormInfo info;
            switch (action) {
                case "ASKINFO":
                    setResponse(askInfo());
                    break;
                case "ADDINFO":
                    info = DormInfo.toInfo(reqJSON.getJSONObject("content"));
                    setResponse(addInfo(info));
                    break;
                case "UPDATEINFO":
                    info = DormInfo.toInfo(reqJSON.getJSONObject("content"));  // 获取客户端传来宿舍信息
                    setResponse(updateInfo(info));
                    break;
                case "ASKALL":
                    setResponse(askAllInfo());
                    break;
                case "DELINFO":
                    String studentNumber = reqJSON.getString("content");
                    setResponse(delInfo(studentNumber));
                    break;

                default:
                    setResponse("{}");
                    break;
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

    /**
     * @Title: delInfo
     * @Description: 删除某个学生的住宿信息(不启用)
     * @param studentNumber
     * @return String
     */
    private String delInfo(String studentNumber) {
        return null;
    }

    /**
     * @Title: askAllInfo
     * @Description: 获取所有宿舍信息
     * @return String
     */
    private String askAllInfo() {
        
        UserInfo userInfo = getUserInfo();
        JSONObject jRet = new JSONObject();
        
//        if (userInfo.getType().equals("student")) { // 学生用户无此权限
//            try {
//                jRet.put("code", 300);
//                jRet.put("content", "该用户无此权限");
//            } catch (JSONException e) {
//                e.printStackTrace();
//            }
//            return jRet.toString();
//        }
        
        List<DormInfo> infoList = dormDao.getAllInfo();
        
        try {
            if (infoList != null) {
                JSONArray jContent = new JSONArray();
                for (DormInfo info : infoList) {
                    jContent.put(info.toJSON());
                }
                jRet.put("content", jContent);
                jRet.put("code", 200);
            } else {
                jRet.put("code", 300);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        
        return jRet.toString();
    }

    /**
     * @Title: addInfo
     * @Description: 添加宿舍信息
     * @param dormInfo
     * @return String
     */
    private String addInfo(DormInfo dormInfo) {

        UserInfo userInfo = getUserInfo();
        JSONObject jRet = new JSONObject();

//        if (userInfo.getType().equals("student")) { // 学生用户无此权限
//            try {
//                jRet.put("code", 300);
//                jRet.put("content", "该用户无此权限");
//            } catch (JSONException e) {
//                e.printStackTrace();
//            }
//            return jRet.toString();
//        }

        if (dormInfo == null) {
            try {
                jRet.put("code", 300);
                jRet.put("content", "客户端信息错误");
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return jRet.toString();
        }

        if (dormDao.addDormInfo(dormInfo)) {
            try {
                jRet.put("code", 200);
                jRet.put("content", "添加信息成功");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            try {
                jRet.put("code", 300);
                jRet.put("content", "更新信息失败");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        return jRet.toString();
    }

    /**
     * @Title: updateInfo
     * @Description: 更新宿舍信息
     * @param dormInfo
     * @return String
     */
    private String updateInfo(DormInfo dormInfo) {

        UserInfo userInfo = getUserInfo();
        JSONObject jRet = new JSONObject();

//        if (userInfo.getType().equals("student")) { // 学生用户无此权限
//            try {
//                jRet.put("code", 300);
//                jRet.put("content", "该用户无此权限");
//            } catch (JSONException e) {
//                e.printStackTrace();
//            }
//            return jRet.toString();
//        }
//
        if (dormInfo == null) {
            try {
                jRet.put("code", 300);
                jRet.put("content", "客户端信息错误");
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return jRet.toString();
        }

        if (dormDao.updateDormInfo(dormInfo)) {
            try {
                jRet.put("code", 200);
                jRet.put("content", "更新信息成功");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            try {
                jRet.put("code", 300);
                jRet.put("content", "更新信息失败");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        return jRet.toString();
    }

    /**
     * @Title: askInfo
     * @Description: 查询用户宿舍信息(当前用户)
     * @return String
     */
    private String askInfo() {
        UserInfo userInfo = getUserInfo();
        JSONObject jRet = new JSONObject();

        DormInfo info = dormDao.getDormInfo(userInfo.getStudentNum());

        if (info != null) {
            try {
                JSONObject jContent = info.toJSON();
                jRet.put("content", jContent);
                dormLogger.debug(TAG + info.toJSON().toString()); 
                jRet.put("code", 200);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            try {
                jRet.put("code", 300);
                jRet.put("content", "查询信息失败");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        dormLogger.debug(TAG + jRet.toString());
        return jRet.toString();
    }

}
